#include <iostream>
using namespace std;

// 快速排序的分区函数
int partition(int arr[], int low, int high) {
    int pivot = arr[high]; // 选择最后一个元素作为基准
    int i = low - 1; // i 是较小元素的索引

    for (int j = low; j <= high - 1; j++) {
        // 如果当前元素小于或等于基准
        if (arr[j] <= pivot) {
            i++; // 增加较小元素的索引
            // 交换 arr[i] 和 arr[j]
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
    }
    // 交换 arr[i + 1] 和 arr[high] (或基准)
    int temp = arr[i + 1];
    arr[i + 1] = arr[high];
    arr[high] = temp;
    return (i + 1);
}

// 快速排序函数
void quickSort(int arr[], int low, int high) {
    if (low < high) {
        // pi 是分区索引，arr[pi] 已经排好序
        int pi = partition(arr, low, high);

        // 分别对分区进行排序
        quickSort(arr, low, pi - 1);
        quickSort(arr, pi + 1, high);
    }
}

int main() {
    cout << "请输入数组长度：";
    int n;
    cin >> n;
    int R[n];
    cout << "请输入数组元素：";
    for (int i = 0; i < n; i++) {
        cin >> R[i];
    }

    cout << "排序前的数组: ";
    for (int i = 0; i < n; i++) {
        cout << R[i] << " ";
    }
    cout << endl;

    quickSort(R, 0, n - 1); // 对数组进行快速排序

    cout << "排序后的数组: ";
    for (int i = 0; i < n; i++) {
        cout << R[i] << " ";
    }
    cout << endl;

    return 0;
}